package com.ruoyi.his.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.his.mapper.OdsDoctorDataMapper;
import com.ruoyi.his.domain.OdsDoctorData;
import com.ruoyi.his.service.IOdsDoctorDataService;

/**
 * 医师人员信息Service业务层处理
 *
 * @author Alan
 * @date 2024-03-09
 */
@Service
public class OdsDoctorDataServiceImpl implements IOdsDoctorDataService
{
    @Autowired
    private OdsDoctorDataMapper odsDoctorDataMapper;

    @Autowired
    private ISysUserService iUserService;

    /**
     * 查询医师人员信息
     *
     * @param id 医师人员信息主键
     * @return 医师人员信息
     */
    @Override
    public OdsDoctorData selectOdsDoctorDataById(Long id)
    {
        return odsDoctorDataMapper.selectOdsDoctorDataById(id);
    }

    /**
     * 查询医师人员信息列表
     *
     * @param odsDoctorData 医师人员信息
     * @return 医师人员信息
     */
    @Override
    public List<OdsDoctorData> selectOdsDoctorDataList(OdsDoctorData odsDoctorData)
    {
        return odsDoctorDataMapper.selectOdsDoctorDataList(odsDoctorData);
    }

    /**
     * 新增医师人员信息
     *
     * @param odsDoctorData 医师人员信息
     * @return 结果
     */
    @Override
    public int insertOdsDoctorData(OdsDoctorData odsDoctorData)
    {
        return odsDoctorDataMapper.insertOdsDoctorData(odsDoctorData);
    }

    /**
     * 修改医师人员信息
     *
     * @param odsDoctorData 医师人员信息
     * @return 结果
     */
    @Override
    public int updateOdsDoctorData(OdsDoctorData odsDoctorData)
    {
        return odsDoctorDataMapper.updateOdsDoctorData(odsDoctorData);
    }

    /**
     * 批量删除医师人员信息
     *
     * @param ids 需要删除的医师人员信息主键
     * @return 结果
     */
    @Override
    public int deleteOdsDoctorDataByIds(Long[] ids)
    {
        return odsDoctorDataMapper.deleteOdsDoctorDataByIds(ids);
    }

    /**
     * 删除医师人员信息信息
     *
     * @param id 医师人员信息主键
     * @return 结果
     */
    @Override
    public int deleteOdsDoctorDataById(Long id)
    {
        return odsDoctorDataMapper.deleteOdsDoctorDataById(id);
    }

    @Override
    public OdsDoctorData getDoctorByDoctorLicence(String DoctorLicence) {
        return odsDoctorDataMapper.selectOdsDoctorByLicence(DoctorLicence);
    }

    @Override
    public AjaxResult registerDoctorByLicence(OdsDoctorData odsDoctorData) {
        //除去 为空或者是空字符的情况
        if (StringUtils.isEmpty(odsDoctorData.getDoctorLicence())) {
            return AjaxResult.error("执业证书号为空或者空字符串！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getName())) {
            return AjaxResult.error("医生名字不能为空或者空字符串！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getIdCard())) {
            return AjaxResult.error("身份证号不能为空或者空字符串！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getMobile())){
            return AjaxResult.error("电话号码不能为空或者空字符串！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getUsername())) {
            return AjaxResult.error("用户名为空或者空字符串！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getPassword())) {
            return AjaxResult.error("密码为空或者空字符串！");
        }

        //通过idcard去查询是否存在  存在就更新  不存在就插入
        OdsDoctorData odsDoctorDataByIdCard = odsDoctorDataMapper.selectByIdCard(odsDoctorData.getIdCard());
         //判断用户是否存在
        String s = iUserService.checkUserNameUnique(odsDoctorData.getUsername());
        //密码加密
        String password = SecurityUtils.encryptPassword(odsDoctorData.getPassword());
        SysUser sysUser = new SysUser();
        sysUser.setUserName(odsDoctorData.getUsername());
        sysUser.setPassword(password);
        sysUser.setDoctorLicence(odsDoctorData.getDoctorLicence());
//        sysUser.setUpdateTime(new Date());
        if (odsDoctorDataByIdCard == null && s.equals(UserConstants.UNIQUE)) {
            int j = iUserService.insertUser(sysUser);
            //保存到医院表中
            int i = odsDoctorDataMapper.insertOdsDoctorData(odsDoctorData);

            if (i != 0&&j!=0){
                return AjaxResult.success();
            }else {
                return AjaxResult.error("系统繁忙，稍后再试！");
            }
        }else if(odsDoctorDataByIdCard != null && s.equals(UserConstants.UNIQUE)){
            int j=0;
            int i=0;
            SysUser user=iUserService.selectUserByDocLis(odsDoctorData.getDoctorLicence());
            //防止一个执业证号，注册两次
            if (user == null) {
                 j = iUserService.insertUser(sysUser);
                /**
                 * s.equals(UserConstants.UNIQUE) 这个判断了用户不存在
                 * user ！= null 说明当前执业证号已经注册了用户  所以此时 不需要更新医师信息
                 */
                i = odsDoctorDataMapper.updateOdsDoctorByIdCard(odsDoctorData);
            }

            if (i != 0&&j != 0){
                return AjaxResult.success();
            }else {
                return AjaxResult.error("系统繁忙，稍后再试！");
            }


        }else {
            return AjaxResult.error("用户名已经被注册了！");
        }
    }

    @Override
    public AjaxResult insterDoc(OdsDoctorData odsDoctorData) {
         // 注册页判断
//        if (StringUtils.isEmpty(odsDoctorData.getDoctorLicence())) {
//            return AjaxResult.error("执业证书号为空或者空字符串！");
//        }
        if (StringUtils.isEmpty(odsDoctorData.getIdCard())) {
            return AjaxResult.error("身份证号不能为空!");
        }
        if (StringUtils.isEmpty(odsDoctorData.getDoctorCode())) {
            return AjaxResult.error("医生编号DoctorCode不能为空！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getHospitalId())) {
            return AjaxResult.error("医生关联医院的字段HospitalId不能为空！");
        }
        if (odsDoctorData.getAntibiosisAuthority()==null) {
            return AjaxResult.error("抗菌药处方权 AntibiosisAuthority不能为空！");
        }
        if (StringUtils.isEmpty(odsDoctorData.getRegisterNumber())) {
            return AjaxResult.error("医生关联医院的字段RegisterNumber不能为空！");
        }
        OdsDoctorData doctorData = odsDoctorDataMapper.selectByIdCard(odsDoctorData.getIdCard());

        if (doctorData == null) {

            //没有用户就插入
            int i = odsDoctorDataMapper.insertOdsDoctorData(odsDoctorData);
            if (i > 0) {
                return AjaxResult.success();
            }else {
                return AjaxResult.error("系统繁忙，稍后再试！");
            }
        }else {

            //用户存在就更新
            int i = odsDoctorDataMapper.updateOdsDoctorByIdCard(odsDoctorData);
            if (i > 0) {
                return AjaxResult.success();
            }else {
                System.out.println("+++++++++++++++++++++++++++++++++++++++++++++");
                return AjaxResult.error("系统繁忙，稍后再试！");
            }
        }

    }


}
